原来使用的是多线程方式,但在系统关闭上还是有用些 小问题。就考虑了引入任务调度框架quartz。
使用场景:每两秒钟获取一次测试任务。
引入jar文件 我采用的maven进行jar的管理
pom.xml中加入
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency>
2. 创建一个job类,该类是我们要实现的业务 这里就是获取测试任务
public class GetTask implements Job{ DaoServiceImpl daoService = new DaoServiceImpl(); int taskid = 0; public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { taskid = daoService.GetTaskId("0"); if (taskid==0) { System.out.println("found task ,taskid="+taskid); } else { System.out.println("no task"); } } }
3. 在创建一个类来触发我们的任务
public class RunnerScheduler { public static void main(String[] args) throws SchedulerException { // 实现定期检索任务 JobDetail jobDetail = JobBuilder.newJob(GetTask.class).withIdentity("mytask").build(); //创建一个Trigger触发器的实例,定义该job立即执行,并且每2秒执行一次,一直执行 SimpleTrigger triggerDetail = TriggerBuilder.newTrigger().withIdentity("myTrigger").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()).build(); sched.scheduleJob(jobDetail, triggerDetail); StdSchedulerFactory factory = new StdSchedulerFactory(); Scheduler scheduler = factory.getScheduler(); scheduler.start(); scheduler.scheduleJob(jobDetail,trigger); } }
上面方法是通过 main完成运行。
在我实际使用中是通过点击按钮进行启动
jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jb.getText(); String ss; ss = jb.getText(); if (ss.equals("启动服务")) { jb.setText("关闭服务"); jl.setText("执行服务状态:启动 "); jta.setText("服务已启动"); jbCloseIndex.setEnabled(false); // 此处调用Quartz 实现运行 RunnerScheduler runner = new RunnerScheduler(); try { runner.run(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
相关标签: